"""
数据库连接的步骤：
1. 与数据库建立连接    pymysql.connect(host=host,..)
2. 得到一个游标的对象（数据库的操作需要通过游标）---》光标   connection.cursor()
3. execute(sql)  具体的去执行sql
4. 获取sql语句的执行结果   fetchall() 或者 fetchone()
5. 关闭游标对象
6. 关闭数据库的连接
"""

import pymysql
#先安装 pymysql     pip install pymysql


# 数据准备
host = "127.0.0.1"  # 数据库地址
port = 3306   # 数据库的端口号
username = "root"   # 连接数据库的账号和密码
password = ""
db_name = "huile"  # 数据库名称

# 1. 建立连接 ,得到数据库的连接对象
connection = pymysql.connect(host=host,
                port=port,
                user=username,
                password=password,
                database=db_name)

# 2. 得到一个游标的对象(光标)
cursor = connection.cursor()
print(cursor)

# 3. execute(sql)  具体的去执行sql
sql = "select xuehao,name,tel from xuesheng;"
cursor.execute(sql)

# 4. 获取sql语句的执行结果

# -------->1、单独获取所有 或者 单独获取一个

# # 4.1 获取所有的 结果——》元组嵌套元组((),(),()....)
# rows = cursor.fetchall()
# print(rows)

# # 4.2 获取一个 ——》一个元组
# row = cursor.fetchone()
# print(row)

# # ---------->2、先获取所有，然后再获取一个
# # 获取所有的——》返回所有的，元组嵌套元组((),(),()....)
# rows = cursor.fetchall()
# print(rows)
# # 获取一个 ——》返回 None
# row = cursor.fetchone()
# print(row)


# # ---------->3、先获取一个，再获取所有的
# # 获取一个 ——》返回 第一个学生的
# row = cursor.fetchone()
# print(row)
# # 获取所有的——》返回 从第二个学生开始的 ，向下的所有学生，不包含第一个
# rows = cursor.fetchall()
# print(rows)

# =====》 游标，理解成 光标


# 怎么解决？——》尽量避免使用一个游标进行多次操作。最好是每获取一次游标执行一个sql语句
#
# ---------->3、 如：先获取一个，再获取所有的
cursor1 = connection.cursor()
sql1 = "select xuehao,name from xuesheng;"
cursor1.execute(sql1)
row1 = cursor1.fetchone()#返回第一行数据
print(row1)

cursor2 = connection.cursor()
sql2 = "select xuehao,name from xuesheng;"
cursor2.execute(sql2)
row2 = cursor2.fetchall()
print(row2)


# ---------->5. 关闭游标对象
cursor.close()
cursor1.close()
cursor2.close()

# ---------->6. 关闭数据库的连接
connection.close()

